home *** CD-ROM | disk | FTP | other *** search
/ PC World 2006 December / PCWorld_2006-12_cd.bin / v cisle / robocopy / rktools.exe / RCDATA / CABINET / rktools.msi / queryad.vbs < prev    next >
Text File  |  2003-04-18  |  7KB  |  248 lines

  1. '---------------------------------------------------------
  2. '
  3. '  adquery:  perform a forest wide search for an 
  4. '         object in AD
  5. '
  6. '---------------------------------------------------------
  7.  
  8. Sub help()
  9.     WScript.Echo ""
  10.     WScript.Echo "Search Active Directory for an object."
  11.     WScript.Echo ""
  12.     WScript.Echo "Usage:"
  13.     Wscript.Echo "======"
  14.     Wscript.Echo "cscript  queryad.vbs SearchFilter Name [GC]"
  15.     WScript.Echo ""
  16.     WScript.Echo "SearchFilter"
  17.     WScript.Echo "============="
  18.     WScript.Echo "-cn        Generic object search by CN"
  19.     WScript.Echo "-c         Search for computer object"
  20.     WScript.Echo "-u         Search for user object by Name"
  21.     WScript.Echo "-ou        Search for an OU"
  22.     WScript.Echo "-dl        Explode a Distribution List"  
  23.     WScript.Echo "-attribute View a schema attribute by display name"       
  24.     WScript.Echo ""    
  25.     WScript.Echo "Name"
  26.     WScript.Echo "===="
  27.     WScript.Echo "Computer's Name, User's CN, OU, CN, or DL's Alias."
  28.     WScript.Echo ""
  29.     WScript.Echo "[GC]"
  30.     WScript.Echo "===="  
  31.     WScript.Echo "Optional - Point the script to query a specific GC."    
  32.     WScript.Echo ""          
  33.     WScript.Echo "examples:"
  34.     WScript.Echo "========="
  35.     WScript.Echo "cscript queryad.vbs -u " &  """" & "Joe Smith" & """"  
  36.     WScript.Echo "cscript queryad.vbs -c computername globalcatalog" 
  37.     WScript.Echo ""
  38.     WScript.Quit
  39. End Sub
  40.  
  41. Dim Con 
  42. Dim oCommand 
  43. Dim objArgs
  44. Dim ADsObject
  45. Dim sADsPath
  46. Dim objName
  47. Dim objClass
  48. Dim objSchema
  49. Dim classObject
  50.  
  51. On Error Resume Next
  52.  
  53. Set objArgs = WScript.Arguments
  54.  
  55. strName = objArgs(1)    
  56.  
  57. Select Case objArgs.Count
  58.     Case 0
  59.         help
  60.     Case 1
  61.         help
  62.     Case 2
  63.         Select Case objArgs(0)
  64.             Case "-u"
  65.  
  66.             Case "-c"
  67.  
  68.             Case "-ou"
  69.  
  70.             Case Else
  71.                 
  72.          help
  73.  
  74.         End Select
  75.     Case Else
  76. End Select
  77.  
  78. '--------------------------------------------------------
  79. 'Create the ADO connection object
  80. '--------------------------------------------------------
  81.  
  82. Set Con = CreateObject("ADODB.Connection")
  83. Con.Provider = "ADsDSOObject"
  84. Con.Open "Active Directory Provider"
  85.  
  86. 'Create ADO command object for the connection.
  87. Set oCommand = CreateObject("ADODB.Command")
  88. oCommand.ActiveConnection = Con
  89.  
  90. 'Get the ADsPath for the domain to search. 
  91. Set Root = GetObject("LDAP://rootDSE")
  92.  
  93. '---------------------------------------------------------
  94. 'Choose the NC you want to search and build the ADsPath
  95. '---------------------------------------------------------
  96.  
  97. sDomain = root.Get("rootDomainNamingContext")
  98.  
  99. If objArgs(0) = "-attribute" Then
  100.     sDomain = root.Get("schemaNamingContext")
  101. End If
  102.     
  103. Set domain = GetObject("GC://" & sDomain)
  104.  
  105. sADsPath = "<" & domain.ADsPath & ">"
  106.  
  107. '--------------------------------------------------------
  108. 'Build the search filter
  109. '--------------------------------------------------------
  110.  
  111. Select Case objArgs(0)
  112.     Case "-c"
  113.         sFilter = "(&(objectClass=computer)(cn=" & strName & "))"
  114.         sAttribsToReturn = "distinguishedName"
  115.  
  116.     Case "-u"
  117.         sFilter = "(&(objectCategory=person)(objectClass=user)(Name=" & strName & "))"
  118.         sAttribsToReturn = "distinguishedName"
  119.  
  120.     Case "-ou"
  121.        sFilter = "(&(objectClass=organizationalUnit)(ou=" & strName & "))"
  122.        sAttribsToReturn = "distinguishedName"
  123.  
  124.     Case "-cn"
  125.         sFilter = "(cn=" & strName & ")"
  126.         sAttribsToReturn = "distinguishedName"
  127.  
  128.     Case "-dl"
  129.         sFilter = "(&(dLMemDefault=1)(mailNickname=" & strName & "))"
  130.         sAttribsToReturn = "distinguishedName"
  131.  
  132. End Select
  133.  
  134. sDepth = "subtree"
  135.  
  136. '---------------------------------------------------------
  137. 'Assemble and execute the query
  138. '---------------------------------------------------------
  139.  
  140. oCommand.CommandText = sADsPath & ";" & sFilter & ";" & _
  141.     sAttribsToReturn & ";" & sDepth
  142.  
  143. Set rs = oCommand.Execute
  144.  
  145. '---------------------------------------------------------
  146. ' Navigate the record set and get the object's DN
  147. '---------------------------------------------------------
  148.  
  149. rs.MoveFirst
  150. While Not rs.EOF
  151.     For i = 0 To rs.Fields.Count - 1
  152.         If rs.Fields(i).Name = "distinguishedName" Then
  153.         Path = rs.Fields(i).Value
  154.         End If        
  155.     Next
  156.     rs.MoveNext
  157. Wend
  158.  
  159. WScript.Echo "Found " & rs.RecordCount & " objects in the forest"
  160. Wscript.Echo ""
  161.  
  162. 'Quit if nothing is found
  163. If rs.RecordCount = 0 Then
  164.     WScript.Quit
  165. End If
  166.  
  167. '----------------------------------------------------------
  168. ' Bind to the object 
  169. '----------------------------------------------------------
  170.  
  171. sADsPath = "GC://" & Path
  172.  
  173. 'Did we explicity specify a server to get the info from?
  174. If objArgs(2) > "" Then
  175.     sADsPath = "GC://" & objArgs(2) & "/" & Path
  176. End If    
  177.  
  178. Set ADsObject = GetObject(sADsPath)
  179.  
  180. '---------------------------------------------------------
  181. ' Display some basic object info
  182. '---------------------------------------------------------
  183.  
  184. objName = ADsObject.Name
  185. WScript.Echo "Name: " & objName
  186.  
  187. objClass = ADsObject.Class
  188. WScript.Echo "Class: " & objClass
  189.  
  190. objSchema = ADsObject.Schema
  191. WScript.Echo "Schema: " & objSchema
  192.  
  193. '---------------------------------------------------------
  194. ' Bind to the class schema object get a properties list
  195. '---------------------------------------------------------
  196.  
  197. Set classObject = GetObject(ADsObject.Schema)
  198.  
  199. '---------------------------------------------------------
  200. 'Display mandatory properties
  201. '---------------------------------------------------------
  202.  
  203. For Each PropertyName In classObject.MandatoryProperties
  204.     sPropName = CStr(PropertyName) & ": "
  205.     For Each PropertyValue In ADsObject.GetEx(PropertyName)
  206.     If CStr(PropertyValue) > "" Then
  207.         sText = sPropName & CStr(PropertyValue)
  208.         WScript.Echo sText
  209.     End If
  210.     Next
  211. Next
  212.  
  213. '---------------------------------------------------------
  214. 'Display optional properties
  215. '---------------------------------------------------------
  216.  
  217. For Each PropertyName In classObject.OptionalProperties
  218.   sPropName = CStr(PropertyName) & ": "
  219.  
  220.     For Each PropertyValue In ADsObject.GetEx(PropertyName)
  221.     If CStr(PropertyValue) > "" Then    
  222.       sText = sPropName & CStr(PropertyValue)
  223.       WScript.Echo sText
  224.     End If
  225.     Next
  226.  
  227. Next
  228.  
  229. '---------------------------------------------------------
  230. ' Display any child objects
  231. '---------------------------------------------------------
  232.  
  233. i = 0
  234. WScript.Echo "Child objects:"
  235. For Each Child in ADsObject
  236.     i = i + 1
  237.     objChild = Child
  238.     sObject = Child.Name
  239.     WScript.Echo "  " & Chr(28) & " " & Mid(sObject, 4)
  240.     
  241.      For Each object in Child
  242.         sGrandChild = child.Name
  243.         WScript.Echo "    " & Chr(28) & " " & Mid(sGrandChild, 4)
  244.         
  245.     Next
  246. Next
  247.  
  248.